#include <iostream>
#include <thread>

/**
 * C++ 多线程库 <thread>
 *
 * std::thread : 表示一个线程，可以创建，启动，等待和销毁线程。
 * std::this_thread ：提供了一些静态成员函数，用于操作当前线程。
 * std::thread::id : 线程的唯一标识符
 *
 *
 * //等待线程完成
 * join()    方法会阻塞当前线程，直到被调用的线程完成执行。
 *
 * //分离线程
 * detach()  当线程执行完毕后，你可以使用detach()方法来分离线程，或者std::thread对象超出作用域自动销毁。
 *
 */

void print_id(int id){
    std::cout << "ID: " << id << " Thread ID: " << std::this_thread::get_id() << "  -----  \n" << std::endl;
}

//使用thread创建并行计算
int sum = 0;
void add(int a,int b){
    sum += a + b;
}

//简单函数，在线程中执行
void print_message(const std::string &message,int delay){
    std::this_thread::sleep_for(std::chrono::microseconds(delay));
    std::cout << message << std::endl;
}

int main() {
   /* std::thread t1(print_id,1);
    std::thread t2(print_id,2);
    t1.join();
    t2.join();*/

   //并行计算
   /*int a = 5;
   int b = 10;
   std::thread t1(add,a,b);
   std::thread t2(add,a,b);
   t1.join();
   t2.join();
   std::cout << "Sum : " << sum << std::endl;*/

   //创建两个线程，每个线程都会执行一个简单的函数，该函数打印一个消息并休眠一段时间
   std::thread t1(print_message,"Thread 1 ",1000);
    std::thread t2(print_message,"Thread 2 ",500);
    //等待线程t1完成
    if (t1.joinable()){
        t1.join();
    }
    //等待线程t2完成
    if (t2.joinable()){
        t2.join();
    }

    std::cout << "Main Thread finished." << std::endl;

    return 0;
}
